Ade ――――――――――――――――――――――――――――――――――――――― I/O 1983年10月号掲載 PC−8001・32K マシン語 08100H−0A0FFH S:08100H コールド・スタート 08100H ホット・スタート  08102H 起動方法 MON L G8100 ――――――――――――――――――――――――――――――――――――――― 整数型コンパイラ 【拡張型・構造化言語】  エイド 「Ade」 ||||||||||||||||||||||||||||| マイコン(パソコン)が世に出て数年がたち、 その急速な進歩には目を見張るばかりです、 現在、実際にマイコンで使用されている言語は、 ほとんどがBASICインタープリンタで、 だれもが初めに勉強し、利用している人も多いと思います。 最近は構造形、自己拡張形のC言語などの すばらしい言語が数多く出てきましたが、 これらの言語を走らせるとなると、 高価なディスク・システムと多くのメモリを必要とするため 実際にはなかなか利用できないのが実情だと思います。 そこで小さなシステムでも充分に走らせることができ、 さらに、C言語のように構造形、 自己拡張形のコンパイラ言語を目標にして制作したのが、 新言語『Ade』です。 ||||||||||||||||||||||||||||| ・――――             ・ |       特 徴       | ・             ――――・ (1)コンパイラ言語であるため   BASICの10倍〜50倍の実行速度をもっている。 (2)構造形言語であるため、プログラムが非常に見やすい。 (3)自己拡張形言語であるため、効率よくプログラムが作れる。 (4)コンパイル時にデバッグ機能も追加することもでき、   トレースも可能であり対話型コンパイラである。 (5)分割コンパイルを可能とし、大きなプログラムも効率よく   コンパイルすることができる。 (6)マシン語とのリンクを充分に考え、   Adeからマシン語プログラムを呼び出すだけではなく、   マシン語からAdeのプログラムを呼び出すこともできる。 (7)コード型コンパイラでないため、ソース・リストと   オブジェクトが1対1に対応し、マシン語の勉強に最適である。 (8)変数において1バイト型と2バイト型の2種類を   あつかうことができる(比較演算も含む)。   1バイト型にすると実行速度、オブジェクト効率が非常によくなる。 (9)記号型言語ではないので、   非常に見やすいプログラムを作ることができる。   また変数名は最後の1文字まで区別する。 (10)3PASSコンパイラであるため、   コマンド単位でのプログラム編成は自由であり、   見やすいプログラムを作ることが可能である。 ・――――             ・ |   プログラムのコマンド化   | ・             ――――・ 本言語には見やすいプログラムを完成するために、 コマンド化という考え方をとってみました。 以下よりコマンド化について説明します。 ●コマンド  “[”と“|”で囲まれた1つのかたまり(モジュール)  をコマンドとします。 ●コマンド・ネーム  “[”の次に書いてあるものが  そのコマンドの名前(コマンド・ネーム)です。  コマンド・ネームは、英字(A〜Z)で始まり、  英字および数字(A〜Z、0〜9)から成る文字列にしてください。  長さに制限はありません。  最後の1文字まで区別します。 ●プログラムを以上のようにして  コマンド化(サブルーチンと考えてもよい)拡張、  定義していくことにより見やすいプログラムを効率よく作れます。  ・――――――――――――――――・  |  例 [ P10 X:=X;       |  |        AGAIN(10)    |  |        X:=X+1;     |  |        PRINT(X) CR   |  |        AROOP ]     |  ・――――――――――――――――・  このプログラムは、1から10の数字を画面に続けて表示するものです。  次にこのP10を利用し、  ・――――――――――――――――・  |    [ P10O2KAI AGAIN(2)   |  |          P10     |  |          ALOOP ]   |  ・――――――――――――――――・  P10O2KAIというコマンドを作りました。  1から10までの数字の表示を2回行ないます。  ・――――――――――――――――・  |    [ TIME AGAIN(1000)   |  |        ALOOP ]     |  ・――――――――――――――――・  これはBASICでもよくある、  ・――――――――――――――――・  |   FOR J=0 TO 1000:NEXT   |  ・――――――――――――――――・  といった、一定の時間何もしないでただループしているものですが、  TIMEという名前のコマンドとして定義しました。  ここで、  ・――――――――――――――――・  |   [ RUN P10O2KAI      |  |      TIME        |  |      P10O2KAI ]     |  ・――――――――――――――――・  といったプログラムが完成します。 このようにして、自分で考えたオリジナル・コマンドを作りながら (コマンド1つずつデバック可能)、見やすい、 そして実行スピードの速いプログラムを作り上げることができるわけです。 ・――――             ・ |   プログラムの入力方法    | ・             ――――・ Adeのプログラムは8K近くにもなるため、 プログラムの入力は慎重に行なってください。 プログラムはマシン語でできているので、 モニタのSコマンドや他のマシン語モニタなどで入力してください。 入力が終わったら、まずカセットにセーブしてください。 そして,実行はG8100です。 ・――――             ・ |     モードについて     | ・             ――――・ Adeには次の5つのモードがあります。 (1)BASICモード   一般のBASlCの状態 (2)モニタ・モード   モニタの状態 プロンプト’*’。 (3)ダイレクト・モード   Adeにおいてコマンドをダイレクトし実行できる状態。   プロンプトは’>’。 (4)エディタ・モード   Adeのプログラムをエディット(製作、編集)する状態、   プロンプトは’#’。 (5)インサート・モード   エディタの中から入るモードで、プログラムの挿入をする状態。         表1 MODE MAP ・―――――――――――――――――――――――――――・ |   ED[RET]    ・―――――・ | |   ・――――――| DIRECT |←――――・ | |   |・――――→| MODE (>) |――――・|G8102 | |   ||     ・―――――・ ||([F・1])| |   ↓|D[RET]   |↑ MON[RET]↓| | |・―――――・   || ・―――――・| || EIDT |@[RET] || |MONITOR || || MODE (#) |―――――⌒⌒――――――|MODE (*) || |・―――――・   || ([F・1]) ・―――――・| |   |↑ BASIC[RET]|| G81[RET]|↑ | |I[RET]||[RET][RET] || ||MON[RET]| | ↓| || ↓| | |・―――――・   || ・―――――・| ||INSERT | |・――――――|BASIC || ||MODE (無) | ・―――――――|MODE (無) || |・―――――・   ・―――――・| ・―――――――――――――――――――――――――――・ 表1は、一度システムが走ったあとの状態における物で、 一番初めにシステムを走らすときには、 ・――――――――――――――――――――――・ |MON[RET]                  | |*L[RET](プログラムをカセットから読み込む) | |G8100[RET]                 | ・――――――――――――――――――――――・ とする。 ・――――             ・ |    エディタについて     | ・             ――――・ Adeでプログラムを実行させるためには、 まずエディタを使ってプログラムを作らなければいけません。 以下にエディタの使い方を述べます。 画面の左に“#”のプロンプトが出ているときが エディット・モードです。 (1)&(NEW)  &コマンドはテキスト・エリアをクリアします。 (2)K(KILL)  Kコマンドはテキストを抹消するコマンドですが、  次の2つの型があります。   ●Kn  テキストのn行目を抹消します。   ●KPn ポインタからn行までを抹消します。 (3)P(POINTER)  ポインタを移動するコマンドです。  次の2つの型があります。   ●P  ポインタをテキスト・エンドにもってきます。   ●Pn ポインタをn行目に移動します。 (4)/(PRPOINT)  現在ポインタの示している行番号を表示します。 (5)T(TEXT)  テキストの内容を表示します。  次の3つの型があります。   ●T  ポインタの表す行よりテキストを表示します。   ●Tn n行目からテキストを表示します。   ●TA テキストをすべて表示します。 (6)S(SAVE)  テキスト(ソース・プログラム)をカセットにセーブします。  Sの後に2文字のファイル・ネームをつけることができます。 (7)L(LOAD)  カセットからテキストをロードします。  ロードする内容は、ポインタの示す行に挿入されます。 (8)C(EXCHANG)  テキスト・トップのアドレスを変更します。   ●CC000  (注:Cコマンド実行の後は、  必ずNEW(&)コマンドを実行すること。 (9)I(INSERT)  Iコマンドは、テキストをポインタの示す行に  インサートするコマンドです。  ・――――――――――――――――・  |例 #1[RET]         |  |  [ RUN PRINT($100) ][RET] |  |  [RET]          |  |  #              |  ・――――――――――――――――・ (10)D(DIRECT)  ダイレクト・モードに戻るコマンドです。 (11)@(MON)  モニタ・モードに入るコマンドです。 (12)A(ASCII)  ASCIIダンプ・コマンドです。  ・――――――――――――――――・  |例 #A1838           |  |(注:[ESC]キーで一時停止。 |  |   [STOP]キーで終了)  |  ・――――――――――――――――・ (13)H(HELP)  ヘルプ・コマンドです。 (14)R(RUN)  エディタ・モードからコンパイル、そして実行するコマンドです。  コンパイルは、デバック付コンパイルです。  実行時には、RUNというコマンドをサーチ実行するので、  RUNというコマンドが  テキスト(ソース・プログラム)にないとエラーとなります。 (15)スクリーン・エディット  行の先頭が、テキスト行番号のときは、  カーソルを移動し、テキストを書き換えることができます。  変更したい行をTコマンドで出力し、  カーソルを移動し変更します。 (16)M(メモリ・マップ出力)  メモリ・マップを出力します。 (17)#(プリンタON)  プリンタをONにするコマンドです。 ・――――             ・ |    コンパイルの方法     | ・             ――――・ Adeでは、コンパイルの方法が以下の5種類あります。 (1)デバック付コンパイル(COM)  デバック付とは、トレース(TRON)、スピード制御、  ブレーク機能([ESC]+[STOP])、  エラーチェックを有しているという意味です。  つまりデバック付コンパイルを行なうと、  上記の内容をチェックしながら  実行可能なオブジェクトを作り出します  (FFによるソフト割り込み) (2)ハイスピード・コンパイル(HCOM)  ハイスピード・コンパイルはデバッグ機能をまったく付けずに  オブジェクトを作り出すコマンドです。  利点は超高速(デバック付の数倍〜数十倍)であるということですが、  無限ループなど入り込むと、  デバッグ付のように[ESC]+[STOP]で  抜け出ることは不可能です。 (3)リファレンス付デバッグ付コンパイル(RCOM)  リファレンス付とは、コンパイル中の状態を見れることです。  この利点はコンパイル・エラーの場所を  見つけるのに非常に役立ちます。  画面に出力されるのは、  ソース・プログラムをコンパイラによって  一度並びかえられたものが出力されるため、  マシン語と1対1に対応しています。  また、プリンタに出力する事も可能です。 (4)リファレンス付ハイスピード・コンパイル(RHCOM)  これはコンパイルしている状態を画面に出力しながら、  ハイスピードで実行可能なオブジェクトを作り出すコマンドです。 (5)即実行型コンパイル(RUN)  (1)、(2)、(3)、(4)はどれもダイレクト・モードから  行なうものですが、  即実行型コンパイルは、エディタから実行します。  これは、コンパイルした後、  自動的にRUNというコマンドを実行します。  つまり、サンプル・プログラムのように、  プログラムのスタートをRUNというコマンドで定義しておくことで、  エディタからコンパイルそして実行が可能です。 以上の5種類を使い分けることで、 能率的にプログラムを作ることか可能です。 ・――――             ・ |      終わりに       | ・             ――――・ 拡張形言語は今後言語の主流になると思います。 しかし、拡張形言語が今までなかったわけではありません。 PASCAL、FORTHなど、つまり重要なことは、 拡張できるということではなく 『ユーザーに拡張させる言語』ということだと思います。 今回のVer. 1.0では、 まだ不足なコマンド(ビルトイン・コマンド)がいくつかあります。 これらのコマンドはぜひ読者のみなさんで作ってください。 【】参孝文献 1)“FORM”        、I/O     ’80年5月〜9月号 2)“BASICコンパイラ”  、I/O     ’80年10月〜11月号 3)“コンパイラのうちとそと” 、共立出版 4)“C―言語とプログラミング”、産業図書 5)“IDS−FORHT”   、インターフェイス’80年5月号 6)“FORTHに関する一考察”、インターフェイス’81年8月号 7)“dB−BASIC”    、I/O     ’80年4月〜6月号